#include "trap.h"
    .set noreorder       # 防止指令重排序
    .globl main
    .text
main:
    # 将0x100加载到$v0寄存器中，用于后续操作
    ori $v0, $zero, 0x100  

    # 将0x99加载到$v1寄存器中
    ori $v1, $zero, 0x99   

    # 执行无符号除法，将$v0除以$v1
    divu $v0, $v1          

    # 获取除法操作的余数并存入$a0寄存器
    mfhi $a0               

    # 获取除法操作的商并存入$a1寄存器
    mflo $a1               
    nop                    # 保持流水线延迟

    # 使用有符号除法，将$v1除以$v0
    div $v1, $v0           

    # 将余数累加到$s0寄存器中
    add $s0, $a0, $zero    

    # 无实际功能的减法操作，占位示例
    sub $t0, $t1, $zero    

    # 执行按位与操作，结果存入$v0寄存器
    and $v0, $s0, $zero    

    # 自己除以自己，有可能触发除零异常
    div $v0, $v0           

    # 再次执行无符号除法，操作$v1寄存器
    divu $v1, $v1          

    # 取商的余数并保存到$t0寄存器
    mfhi $t0               

    # 取商的结果并保存到$t1寄存器
    mflo $t1               
    nop                    # 延迟槽

    HIT_GOOD_TRAP          # 结束程序执行，触发TRAP

    .org 0x380
    mfc0 $a1, $13           # 从CP0寄存器中读取异常原因
    ori $a2, $zero, 0x0     # 除零异常代码
    beq $a1, $a2, exc_eret  # 如果异常代码为0，则跳转到异常处理函数
    nop

    exc_eret:
    .set mips32
    eret                    # 异常处理函数
    .set mips1
    nop
    nop
    nop